﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Entidades.Sistema;
using Entidades.Sistema.Venta;

namespace Mapping.Sistema.Venta
{
    public static class MappingUnidad
    {
        public static List<Unidad> ConsultarUnidades()
        {
            try
            {
                SqlCommand cmdUnidad = new SqlCommand();
                cmdUnidad.CommandText = "sp_ConsultarUnidadMedida";
                cmdUnidad.CommandType = System.Data.CommandType.StoredProcedure;
                Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
                cmdUnidad.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                SqlDataReader drUnidad = cmdUnidad.ExecuteReader();

                List<Unidad> ColUnidades = new List<Unidad>();

                while (drUnidad.Read())
                {
                    Unidad oUnidad = new Unidad();
                    oUnidad.IdUnidadMedida = Convert.ToInt32(drUnidad["Id_UnidadMedida"]);
                    oUnidad.Descripcion = drUnidad["Descripcion"].ToString();
                    oUnidad.Nombre = drUnidad["Nombre"].ToString();
                    oUnidad.Estado = drUnidad["Estado"].ToString();
                    ColUnidades.Add(oUnidad);
                }

                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
                return ColUnidades;
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }

        public static Unidad ConsultarUnidadePorClave(int idunidad)
        {
            try
            {
                SqlCommand cmdUnidad = new SqlCommand();
                cmdUnidad.CommandText = "sp_ConsultarUnidadMedidaPorClave";
                cmdUnidad.CommandType = System.Data.CommandType.StoredProcedure;
                cmdUnidad.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
                cmdUnidad.Parameters.Add("@IdUnidadMedida", System.Data.SqlDbType.Int).Value = idunidad;
                SqlDataReader drUnidad = cmdUnidad.ExecuteReader();

                Unidad oUnidad = new Unidad();

                while (drUnidad.Read())
                {   
                    oUnidad.IdUnidadMedida = Convert.ToInt32(drUnidad["Id_UnidadMedida"]);
                    oUnidad.Descripcion = drUnidad["Descripcion"].ToString();
                    oUnidad.Nombre = drUnidad["Nombre"].ToString();
                    oUnidad.Estado = drUnidad["Estado"].ToString();
                }

                return oUnidad;
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }

        public static bool AgregarUnidad(Unidad oUnidad)
        {
            SqlCommand cmdUnidad = new SqlCommand();
            cmdUnidad.CommandText = "sp_AgregarUnidadMedida";
            cmdUnidad.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdUnidad.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdUnidad.Parameters.Add("@Id_UnidadMedida", System.Data.SqlDbType.Int).Value = oUnidad.IdUnidadMedida;
            cmdUnidad.Parameters.Add("@Descripcion", System.Data.SqlDbType.VarChar, 50).Value = oUnidad.Descripcion;
            cmdUnidad.Parameters.Add("@Estado", System.Data.SqlDbType.VarChar, 50).Value = oUnidad.Estado;
            cmdUnidad.Parameters.Add("@Nombre", System.Data.SqlDbType.VarChar, 50).Value = oUnidad.Nombre;
            cmdUnidad.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return true;
        }

        public static int ModificarUnidad(Unidad oUnidad)
        {
            SqlCommand cmdUnidad = new SqlCommand();
            cmdUnidad.CommandText = "sp_ModificarUnidadMedida";
            cmdUnidad.CommandType = System.Data.CommandType.StoredProcedure;
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdUnidad.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdUnidad.Parameters.Add("@Id_UnidadMedida", System.Data.SqlDbType.Int).Value = oUnidad.IdUnidadMedida;
            cmdUnidad.Parameters.Add("@Nombre", System.Data.SqlDbType.VarChar).Value = oUnidad.Nombre;
            cmdUnidad.Parameters.Add("@Descripcion", System.Data.SqlDbType.VarChar).Value = oUnidad.Descripcion;
            cmdUnidad.Parameters.Add("@Estado", System.Data.SqlDbType.VarChar, 50).Value = oUnidad.Estado;
            int nro = Convert.ToInt32(cmdUnidad.ExecuteScalar());

            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return nro;
        }

        public static bool EliminarUnidad(Unidad oUnidad)
        {
            SqlCommand cmdEliminarUnidad = new SqlCommand();
            cmdEliminarUnidad.CommandText = "sp_EliminarUnidadMedida";
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            cmdEliminarUnidad.CommandType = System.Data.CommandType.StoredProcedure;
            cmdEliminarUnidad.Connection = Servicios.Conexion.ObtenerInstancia().RetornarConexion();
            cmdEliminarUnidad.Parameters.Add("@Id_UnidadMedida", System.Data.SqlDbType.Int).Value = oUnidad.IdUnidadMedida;
            cmdEliminarUnidad.ExecuteNonQuery();
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            
            return true;
        }
    }
}
